/**
 * 登录页面JavaScript逻辑
 */

// API基础地址
const API_BASE_URL = 'http://localhost:8080';

// 用户角色枚举
const UserRole = {
    NORMAL_USER: 0,      // 普通用户
    SITE_ADMIN: 1,       // 接种点管理员
    SUPER_ADMIN: 2       // 系统管理员
};

// DOM元素
const loginForm = document.getElementById('loginForm');
const accountInput = document.getElementById('account');
const passwordInput = document.getElementById('password');
const rememberMeCheckbox = document.getElementById('rememberMe');
const loginBtn = document.getElementById('loginBtn');
const togglePasswordBtn = document.getElementById('togglePassword');
const alertBox = document.getElementById('alertBox');
const alertMessage = document.getElementById('alertMessage');

// 页面加载完成后执行
document.addEventListener('DOMContentLoaded', function() {
    // 初始化
    init();
    
    // 绑定事件
    bindEvents();
});

/**
 * 初始化函数
 */
function init() {
    // 检查是否有记住的账号
    const rememberedAccount = localStorage.getItem('rememberedAccount');
    if (rememberedAccount) {
        accountInput.value = rememberedAccount;
        rememberMeCheckbox.checked = true;
    }
    
    // 检查是否已登录
    const token = localStorage.getItem('token');
    if (token) {
        // 可以在这里验证token是否有效
        // 如果有效，可以直接跳转到主页
        console.log('用户已登录，Token:', token);
    }
}

/**
 * 绑定事件
 */
function bindEvents() {
    // 表单提交事件
    loginForm.addEventListener('submit', handleLogin);
    
    // 密码显示/隐藏切换
    togglePasswordBtn.addEventListener('click', togglePasswordVisibility);
    
    // 输入框失焦验证
    accountInput.addEventListener('blur', validateAccount);
    passwordInput.addEventListener('blur', validatePassword);
    
    // 输入时清除错误提示
    accountInput.addEventListener('input', function() {
        clearError('accountError');
    });
    
    passwordInput.addEventListener('input', function() {
        clearError('passwordError');
    });
}

/**
 * 处理登录
 */
async function handleLogin(event) {
    event.preventDefault();
    
    // 验证表单
    if (!validateForm()) {
        return;
    }
    
    // 获取表单数据
    const account = accountInput.value.trim();
    const password = passwordInput.value.trim();
    const rememberMe = rememberMeCheckbox.checked;
    
    // 显示加载状态
    setLoadingState(true);
    
    try {
        // 调用登录API
        const response = await fetch(`${API_BASE_URL}/user/login`, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify({
                account: account,
                password: password
            })
        });
        
        // 解析响应
        const result = await response.json();
        
        // 处理响应结果
        if (result.code === 200) {
            // 登录成功 - result.data 是 LoginResponse 对象，包含 token 字段
            const token = result.data.token;

            // 保存Token到localStorage
            localStorage.setItem('token', token);

            // 解析JWT token获取用户信息
            const userInfo = parseJWT(token);
            if (userInfo) {
                localStorage.setItem('userInfo', JSON.stringify(userInfo));
            }

            // 如果勾选了"记住我"，保存账号
            if (rememberMe) {
                localStorage.setItem('rememberedAccount', account);
            } else {
                localStorage.removeItem('rememberedAccount');
            }

            // 显示成功提示
            showAlert('登录成功！正在跳转...', 'success');

            // 延迟跳转到对应的主页
            setTimeout(() => {
                redirectToHomePage(userInfo);
            }, 1500);
            
        } else {
            // 登录失败
            showAlert(result.errorMsg || '登录失败，请检查账号和密码', 'error');
            setLoadingState(false);
        }
        
    } catch (error) {
        console.error('登录请求失败:', error);
        showAlert('网络错误，请检查服务器是否启动', 'error');
        setLoadingState(false);
    }
}

/**
 * 验证表单
 */
function validateForm() {
    let isValid = true;
    
    // 验证账号
    if (!validateAccount()) {
        isValid = false;
    }
    
    // 验证密码
    if (!validatePassword()) {
        isValid = false;
    }
    
    return isValid;
}

/**
 * 验证账号
 */
function validateAccount() {
    const account = accountInput.value.trim();
    
    if (!account) {
        showError('accountError', '账号不能为空');
        accountInput.classList.add('error');
        return false;
    }
    
    if (account.length < 3) {
        showError('accountError', '账号长度不能少于3个字符');
        accountInput.classList.add('error');
        return false;
    }
    
    clearError('accountError');
    accountInput.classList.remove('error');
    return true;
}

/**
 * 验证密码
 */
function validatePassword() {
    const password = passwordInput.value.trim();
    
    if (!password) {
        showError('passwordError', '密码不能为空');
        passwordInput.classList.add('error');
        return false;
    }
    
    if (password.length < 6) {
        showError('passwordError', '密码长度不能少于6个字符');
        passwordInput.classList.add('error');
        return false;
    }
    
    clearError('passwordError');
    passwordInput.classList.remove('error');
    return true;
}

/**
 * 显示错误信息
 */
function showError(elementId, message) {
    const errorElement = document.getElementById(elementId);
    if (errorElement) {
        errorElement.textContent = message;
    }
}

/**
 * 清除错误信息
 */
function clearError(elementId) {
    const errorElement = document.getElementById(elementId);
    if (errorElement) {
        errorElement.textContent = '';
    }
}

/**
 * 显示提示信息
 */
function showAlert(message, type = 'error') {
    alertMessage.textContent = message;
    alertBox.className = 'alert ' + type;
    alertBox.style.display = 'flex';
    
    // 3秒后自动隐藏
    setTimeout(() => {
        alertBox.style.display = 'none';
    }, 3000);
}

/**
 * 设置加载状态
 */
function setLoadingState(isLoading) {
    const btnText = loginBtn.querySelector('.btn-text');
    const btnLoading = loginBtn.querySelector('.btn-loading');
    
    if (isLoading) {
        btnText.style.display = 'none';
        btnLoading.style.display = 'inline';
        loginBtn.disabled = true;
    } else {
        btnText.style.display = 'inline';
        btnLoading.style.display = 'none';
        loginBtn.disabled = false;
    }
}

/**
 * 切换密码显示/隐藏
 */
function togglePasswordVisibility() {
    const type = passwordInput.getAttribute('type');

    if (type === 'password') {
        passwordInput.setAttribute('type', 'text');
        togglePasswordBtn.classList.remove('fa-eye');
        togglePasswordBtn.classList.add('fa-eye-slash');
    } else {
        passwordInput.setAttribute('type', 'password');
        togglePasswordBtn.classList.remove('fa-eye-slash');
        togglePasswordBtn.classList.add('fa-eye');
    }
}

/**
 * 解析JWT Token
 */
function parseJWT(token) {
    try {
        const base64Url = token.split('.')[1];
        const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
        const jsonPayload = decodeURIComponent(atob(base64).split('').map(function(c) {
            return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
        }).join(''));
        return JSON.parse(jsonPayload);
    } catch (error) {
        console.error('解析JWT失败:', error);
        return null;
    }
}

/**
 * 根据用户角色跳转到对应的主页
 */
function redirectToHomePage(userInfo) {
    if (!userInfo || userInfo.identityInfo === undefined) {
        window.location.href = 'user/home.html';
        return;
    }

    switch (userInfo.identityInfo) {
        case UserRole.NORMAL_USER:
            window.location.href = 'user/home.html';
            break;
        case UserRole.SITE_ADMIN:
            window.location.href = 'site-admin/home.html';
            break;
        case UserRole.SUPER_ADMIN:
            window.location.href = 'super-admin/home.html';
            break;
        default:
            window.location.href = 'user/home.html';
    }
}
